perm filename RAMSEY[EKL,SYS]2 blob sn#820212 filedate 1986-07-05 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	(wipe-out)
C00003 00003	selection: 7 lines
C00005 00004	diagonalisation: 13 lines			***bug?***
C00010 00005	the proof of ramsey's theorem: 11 lines
C00017 ENDMK
C⊗;
(wipe-out)
(get-proofs natset prf ekl sys)                       ;need the natset file
;time: 34s
;selection: 7 lines
;4s

(proof select)

(define select |∀f a.select(f,a)=(if unbound(inverse(f,a,0)) then 0 else 1)|)
(label simpinfo)

(decl stabilize (type: |@funct⊗@set→@set|))
(define stabilize
        |∀f a.stabilize(f,a)=
	      (if unbound(inverse(f,a,0)) then inverse(f,a,0) else inverse(f,a,1))|)
(label simpinfo) 

(trw |select(f,a)=0∨select(f,a)=1| (open select))
;SELECT(F,A)=0∨SELECT(F,A)=1
(label simpinfo)

(trw |stabilize(f,a)⊂a| (open stabilize))
;STABILIZE(F,A)⊂A
(label simpinfo)

(trw |nεstabilize(f,a)⊃f(n)=select(f,a)| (open stabilize select inverse epsilon))
;NεSTABILIZE(F,A)⊃F(N)=SELECT(F,A)
(label stabselprop)

(trw |(∀n.f(n)=0∨f(n)=1)∧unbound(a)⊃unbound(stabilize(f,a))|
     (open stabilize) (use split_unbound))
;(∀N.F(N)=0∨F(N)=1)∧UNBOUND(A)⊃UNBOUND(STABILIZE(F,A))
(label splitprop)
;diagonalisation: 13 lines			***bug?***
;11s
(proof diagonalize)

(assume |∀n.seq(n')⊂seq(n)∧unbound(seq(n))|)
(label diagonal_assumption)
 
(ue (rel |λn m.seq(m)⊂seq(n)|) transitive_induction
    (use diagonal_assumption)
    (part 1 (open transitive inclusion)))
;∀N M.N<M⊃SEQ(M)⊂SEQ(N)
;deps: (DIAGONAL_ASSUMPTION)
(label diagonal_step1)

(define diagset |∀n.diagset(n)≡(∀m.mεdiagset∩segm(n)⊃nεseq(m))| 
	(use course_of_values_definition))

(trw |∀n m.n<m∧diagset(n)∧diagset(m)⊃mεseq(n)|
     (open epsilon segm intersection diagset))
;∀N M.N<M∧DIAGSET(N)∧DIAGSET(M)⊃MεSEQ(N)
(label diagonal_step2)

(assume |¬unbound(diagset)|)
(label assume_not)

(rw assume_not (use boundfact mode: always) (open inclusion epsilon segm))
;∀N.DIAGSET(N)⊃N<BOUND(DIAGSET)
;deps: (ASSUME_NOT)
(label diagset_bound)

;find a counter example
(decl ctr (sort: natnum))
(define ctr |ctrεseq(bound(diagset))∧¬(ctrεsegm(bound(diagset)))|
	(der diagonal_assumption inclusiondef unboundef epsilondef))
(label counterexample)

(trw |∀m.diagset(m)⊃(seq(m))(ctr)| 
     (der diagset_bound diagonal_step1 inclusiondef epsilondef counterexample))
;∀M.DIAGSET(M)⊃(SEQ(M))(CTR)
;deps: (DIAGONAL_ASSUMPTION ASSUME_NOT)

(trw |diagset(ctr)| (open diagset epsilon intersection) (use *))
;DIAGSET(CTR)
;deps: (DIAGONAL_ASSUMPTION ASSUME_NOT)
 
(rw counterexample (open epsilon segm))
;(SEQ(BOUND(DIAGSET)))(CTR)∧¬CTR<BOUND(DIAGSET)
;deps: (DIAGONAL_ASSUMPTION)

(tci (assume_not) false (der -1 -2 diagset_bound))
;UNBOUND(DIAGSET)
;deps: (DIAGONAL_ASSUMPTION)

(tci (diagonal_assumption) |∃a.unbound(a)∧∀n m.n<m∧a(n)∧a(m)⊃mεseq(n)|
     (der * diagonal_step2))
;(∀N.SEQ(N')⊂SEQ(N)∧UNBOUND(SEQ(N)))⊃
;(∃A.UNBOUND(A)∧(∀N M.N<M∧A(N)∧A(M)⊃MεSEQ(N)))
(label diagonalprop)
;the proof of ramsey's theorem: 11 lines
;19s

(proof ramsey)

(assume |∀n m.hf(n,m)=0∨hf(n,m)=1|)
(label assumption)

;this is the first stabilisation
(define stab1 
   |stab1(0)=stabilize(λxv.hf(0,xv),univ)∧
    (∀n.stab1(n')=stabilize(λxv.hf(n',xv),stab1(n)))|
   (use inductive_set_definition))
 
;establish two facts for diagonalisation

(trw |∀n.stab1(n')⊂stab1(n)| (open stab1))
;∀N.STAB1(N')⊂STAB1(N)

(ue (a |λxv.unbound(stab1(xv))|) proof_by_induction
    (use splitprop assumption) (open stab1))
;∀N.UNBOUND(STAB1(N))
;deps: (ASSUMPTION)

;now diagonalize
(define hom1 |unbound(hom1)∧(∀n m.n<m∧hom1(n)∧hom1(m)⊃mεstab1(n))|
	(use -1 -2) (use diagonalprop ue: ((seq . stab1))))
;deps: (ASSUMPTION)
(label hom1prop)

;define the value of h on diagonal sets
(define stabf |stabf(0)=select(λxv.hf(0,xv),univ)∧
	       ∀n.stabf(n')=select(λxv.hf(n',xv),stab1(n))|
	(use inductive_definition))

;verify the value
(ue (a  |λn.((∀m.mεstab1(n)⊃hf(n,m)=stabf(n))∧(stabf(n)=0∨stabf(n)=1))|)
    proof_by_induction
    (open stabf stab1) (use stabselprop ue: ((f.|λxv.hf(n,xv)|)) ))
;∀N.(∀M.MεSTAB1(N)⊃HF(N,M)=STABF(N))∧(STABF(N)=0∨STABF(N)=1)
(label stabfprop)

;define the ultimate stable set
(decl hom (type: |@set|))
(define hom |hom=stabilize(stabf,hom1)|)
      
;verify the properties of the stable set
(trw |unbound(hom)∧∀n m.(n<m∧hom(n)∧hom(m)⊃hf(n,m)=select(stabf,hom1))|
     (part 1 (open hom) (use hom1prop stabfprop splitprop))
     (part 2 (open select hom hom1 stabilize inverse) (use stabfprop hom1prop)))
;UNBOUND(HOM)∧(∀N M.N<M∧HOM(N)∧HOM(M)⊃HF(N,M)=SELECT(STABF,HOM1))
;deps: (ASSUMPTION)

;now wrap it all up
(tci (assumption) |∃hm v.unbound(hm)∧(∀n m.n<m∧hm(n)∧hm(m)⊃hf(n,m)=v)| (use *))
;(∀N M.HF(N,M)=0∨HF(N,M)=1)⊃(∃HM V.UNBOUND(HM)∧(∀N M.N<M∧HM(N)∧HM(M)⊃HF(N,M)=V))